home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / ColorPicker.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  11.6 KB  |  423 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        ColorPicker.mod
  3.  
  4.      Contains:    Color Picker package Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE ColorPicker;
  23.  
  24. IMPORT SYSTEM, Types, Quickdraw, Events, Dialogs, CMICCProfile, CMApplication,
  25.        Balloons;
  26.  
  27. (* $PUSH*)
  28. (* $ALIGN MAC68K*)
  29. (* $LibExport+*)
  30.  
  31. CONST
  32. (*Maximum small fract value, as long*)
  33.     MaxSmallFract*                = $0000FFFF;
  34.  
  35.     kDefaultWidth*                = 383;
  36.     kDefaultHeight*                = 238;
  37.  
  38.     kDidNothing*                    = 0;
  39.     kColorChanged*                = 1;
  40.     kOkHit*                        = 2;
  41.     kCancelHit*                    = 3;
  42.     kNewPickerChosen*            = 4;
  43.     kApplItemHit*                = 5;
  44.  
  45.     
  46. TYPE
  47.     PickerAction* = INTEGER;
  48.  
  49.  
  50. CONST
  51.     kOriginalColor*                = 0;
  52.     kNewColor*                    = 1;
  53.  
  54.     
  55. TYPE
  56.     ColorType* = INTEGER;
  57.  
  58.  
  59. CONST
  60.     kCut*                        = 0;
  61.     kCopy*                        = 1;
  62.     kPaste*                        = 2;
  63.     kClear*                        = 3;
  64.     kUndo*                        = 4;
  65.  
  66.     
  67. TYPE
  68.     EditOperation* = INTEGER;
  69.  
  70.  
  71. CONST
  72.     kMouseDown*                    = 0;
  73.     kKeyDown*                    = 1;
  74.     kFieldEntered*                = 2;
  75.     kFieldLeft*                    = 3;
  76.     kCutOp*                        = 4;
  77.     kCopyOp*                        = 5;
  78.     kPasteOp*                    = 6;
  79.     kClearOp*                    = 7;
  80.     kUndoOp*                        = 8;
  81.  
  82.     
  83. TYPE
  84.     ItemModifier* = INTEGER;
  85.  
  86.  
  87. CONST
  88.     kAtSpecifiedOrigin*            = 0;
  89.     kDeepestColorScreen*            = 1;
  90.     kCenterOnMainScreen*            = 2;
  91.  
  92.     
  93. TYPE
  94.     DialogPlacementSpec* = INTEGER;
  95.  
  96.  
  97. CONST
  98.     DialogIsMoveable*            = 1;
  99.     DialogIsModal*                = 2;
  100.     CanModifyPalette*            = 4;
  101.     CanAnimatePalette*            = 8;
  102.     AppIsColorSyncAware*            = 16;
  103.     InSystemDialog*                = 32;
  104.     InApplicationDialog*            = 64;
  105.     InPickerDialog*                = 128;
  106.     DetachedFromChoices*            = 256;
  107.     CanDoColor*                    = 1;
  108.     CanDoBlackWhite*                = 2;
  109.     AlwaysModifiesPalette*        = 4;
  110.     MayModifyPalette*            = 8;
  111.     PickerIsColorSyncAware*        = 16;
  112.     CanDoSystemDialog*            = 32;
  113.     CanDoApplDialog*                = 64;
  114.     HasOwnDialog*                = 128;
  115.     CanDetach*                    = 256;
  116.  
  117.     kNoForcast*                    = 0;
  118.     kMenuChoice*                    = 1;
  119.     kDialogAccept*                = 2;
  120.     kDialogCancel*                = 3;
  121.     kLeaveFocus*                    = 4;
  122.     kPickerSwitch*                = 5;
  123.     kNormalKeyDown*                = 6;
  124.     kNormalMouseDown*            = 7;
  125.  
  126.     
  127. TYPE
  128.     EventForcaster* = INTEGER;
  129.  
  130. (* A Picker.SmallFract value is just the fractional part of a Types.Fixed number,
  131. which is the low order word.  SmallFracts are used to save room,
  132. and to be compatible with Quickdraw's Quickdraw.RGBColor.  They can be
  133. assigned directly to and from INTEGERs. *)
  134. (* Unsigned fraction between 0 and 1 *)
  135.     SmallFract* = INTEGER;
  136.  
  137. (* For developmental simplicity in switching between the HLS and HSV
  138. models, HLS is reordered into HSL. Thus both models start with
  139. hue and saturation values; value/lightness/brightness is last. *)
  140.     HSVColor* = RECORD
  141.         hue*:                    SmallFract;                                (*Fraction of circle, red at 0*)
  142.         saturation*:                SmallFract;                                (*0-1, 0 for gray, 1 for pure color*)
  143.         value*:                    SmallFract;                                (*0-1, 0 for black, 1 for max intensity*)
  144.     END;
  145.  
  146.     HSLColor* = RECORD
  147.         hue*:                    SmallFract;                                (*Fraction of circle, red at 0*)
  148.         saturation*:                SmallFract;                                (*0-1, 0 for gray, 1 for pure color*)
  149.         lightness*:                SmallFract;                                (*0-1, 0 for black, 1 for white*)
  150.     END;
  151.  
  152.     CMYColor* = RECORD
  153.         cyan*:                    SmallFract;
  154.         magenta*:                SmallFract;
  155.         yellow*:                    SmallFract;
  156.     END;
  157.  
  158.     PMColor* = RECORD
  159.         profile*:                CMICCProfile.CMProfileHandle;
  160.         color*:                    CMApplication.CMColor;
  161.     END;
  162.  
  163.     PMColorPtr* = POINTER TO PMColor;
  164.  
  165.     picker* = Types.Ptr;
  166.  
  167.     PickerIconData* = RECORD
  168.         scriptCode*:                INTEGER;
  169.         iconSuiteID*:            INTEGER;
  170.         helpResType*:            Types.ResType;
  171.         helpResID*:                INTEGER;
  172.     END;
  173.  
  174.     PickerInitData* = RECORD
  175.         pickerDialog*:            Dialogs.DialogPtr;
  176.         choicesDialog*:            Dialogs.DialogPtr;
  177.         flags*:                    LONGINT;
  178.         yourself*:                picker;
  179.     END;
  180.  
  181.     PickerMenuItemInfo* = RECORD
  182.         editMenuID*:                INTEGER;
  183.         cutItem*:                INTEGER;
  184.         copyItem*:                INTEGER;
  185.         pasteItem*:                INTEGER;
  186.         clearItem*:                INTEGER;
  187.         undoItem*:                INTEGER;
  188.     END;
  189.  
  190.     PickerMenuState* = RECORD
  191.         cutEnabled*:                BOOLEAN;
  192.         copyEnabled*:            BOOLEAN;
  193.         pasteEnabled*:            BOOLEAN;
  194.         clearEnabled*:            BOOLEAN;
  195.         undoEnabled*:            BOOLEAN;
  196.         undoString*:                Types.Str255;
  197.     END;
  198.  
  199.     ColorChangedProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (userData: LONGINT; VAR newColor: PMColor);
  200.     UserEventProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (VAR event: Events.EventRecord): BOOLEAN;
  201.     ColorChangedUPP* = Types.UniversalProcPtr;
  202.     UserEventUPP* = Types.UniversalProcPtr;
  203.  
  204.     ColorPickerInfo* = RECORD
  205.         theColor*:                PMColor;
  206.         dstProfile*:                CMICCProfile.CMProfileHandle;
  207.         flags*:                    LONGINT;
  208.         placeWhere*:                DialogPlacementSpec;
  209.         dialogOrigin*:            Types.Point;
  210.         pickerType*:                LONGINT;
  211.         eventProc*:                UserEventUPP;
  212.         colorProc*:                ColorChangedUPP;
  213.         colorProcData*:            LONGINT;
  214.         prompt*:                    Types.Str255;
  215.         mInfo*:                    PickerMenuItemInfo;
  216.         newColorChosen*:            BOOLEAN;
  217.         filler*:                    Types.SInt8;
  218.     END;
  219.  
  220.     SystemDialogInfo* = RECORD
  221.         flags*:                    LONGINT;
  222.         pickerType*:                LONGINT;
  223.         placeWhere*:                DialogPlacementSpec;
  224.         dialogOrigin*:            Types.Point;
  225.         mInfo*:                    PickerMenuItemInfo;
  226.     END;
  227.  
  228.     PickerDialogInfo* = RECORD
  229.         flags*:                    LONGINT;
  230.         pickerType*:                LONGINT;
  231.         dialogOrigin*:            POINTER TO Types.Point;
  232.         mInfo*:                    PickerMenuItemInfo;
  233.     END;
  234.  
  235.     ApplicationDialogInfo* = RECORD
  236.         flags*:                    LONGINT;
  237.         pickerType*:                LONGINT;
  238.         theDialog*:                Dialogs.DialogPtr;
  239.         pickerOrigin*:            Types.Point;
  240.         mInfo*:                    PickerMenuItemInfo;
  241.     END;
  242.  
  243.     EventData* = RECORD
  244.         event*:                    POINTER TO Events.EventRecord;
  245.         action*:                    PickerAction;
  246.         itemHit*:                INTEGER;
  247.         handled*:                BOOLEAN;
  248.         filler*:                    Types.SInt8;
  249.         colorProc*:                ColorChangedUPP;
  250.         colorProcData*:            LONGINT;
  251.         forcast*:                EventForcaster;
  252.     END;
  253.  
  254.     EditData* = RECORD
  255.         theEdit*:                EditOperation;
  256.         action*:                    PickerAction;
  257.         handled*:                BOOLEAN;
  258.         filler*:                    Types.SInt8;
  259.     END;
  260.  
  261.     ItemHitData* = RECORD
  262.         itemHit*:                INTEGER;
  263.         iMod*:                    ItemModifier;
  264.         action*:                    PickerAction;
  265.         colorProc*:                ColorChangedUPP;
  266.         colorProcData*:            LONGINT;
  267.         where*:                    Types.Point;
  268.     END;
  269.  
  270.     HelpItemInfo* = RECORD
  271.         options*:                LONGINT;
  272.         tip*:                    Types.Point;
  273.         altRect*:                Types.Rect;
  274.         theProc*:                INTEGER;
  275.         helpVariant*:            INTEGER;
  276.         helpMessage*:            Balloons.HMMessageRecord;
  277.     END;
  278.  
  279. (*    Below are the color conversion routines.*)
  280.  
  281. PROCEDURE Fix2SmallFract*(f: Types.Fixed): SmallFract;
  282.     (*$IF NOT GENERATINGCFM*)
  283.     INLINE PASCAL $3F3C, $0001, $A82E;
  284.     (*$END*)
  285. PROCEDURE SmallFract2Fix*(s: SmallFract): Types.Fixed;
  286.     (*$IF NOT GENERATINGCFM*)
  287.     INLINE PASCAL $3F3C, $0002, $A82E;
  288.     (*$END*)
  289. PROCEDURE CMY2RGB*((*CONST*)VAR cColor: CMYColor; VAR rColor: Quickdraw.RGBColor);
  290.     (*$IF NOT GENERATINGCFM*)
  291.     INLINE PASCAL $3F3C, $0003, $A82E;
  292.     (*$END*)
  293. PROCEDURE RGB2CMY*((*CONST*)VAR rColor: Quickdraw.RGBColor; VAR cColor: CMYColor);
  294.     (*$IF NOT GENERATINGCFM*)
  295.     INLINE PASCAL $3F3C, $0004, $A82E;
  296.     (*$END*)
  297. PROCEDURE HSL2RGB*((*CONST*)VAR hColor: HSLColor; VAR rColor: Quickdraw.RGBColor);
  298.     (*$IF NOT GENERATINGCFM*)
  299.     INLINE PASCAL $3F3C, $0005, $A82E;
  300.     (*$END*)
  301. PROCEDURE RGB2HSL*((*CONST*)VAR rColor: Quickdraw.RGBColor; VAR hColor: HSLColor);
  302.     (*$IF NOT GENERATINGCFM*)
  303.     INLINE PASCAL $3F3C, $0006, $A82E;
  304.     (*$END*)
  305. PROCEDURE HSV2RGB*((*CONST*)VAR hColor: HSVColor; VAR rColor: Quickdraw.RGBColor);
  306.     (*$IF NOT GENERATINGCFM*)
  307.     INLINE PASCAL $3F3C, $0007, $A82E;
  308.     (*$END*)
  309. PROCEDURE RGB2HSV*((*CONST*)VAR rColor: Quickdraw.RGBColor; VAR hColor: HSVColor);
  310.     (*$IF NOT GENERATINGCFM*)
  311.     INLINE PASCAL $3F3C, $0008, $A82E;
  312.     (*$END*)
  313. (*    Below brings up the ColorPicker 1.0 Dialog*)
  314. PROCEDURE GetColor*(where: Types.Point; prompt: Types.ConstStr255Param; (*CONST*)VAR inColor: Quickdraw.RGBColor; VAR outColor: Quickdraw.RGBColor): BOOLEAN;
  315.     (*$IF NOT GENERATINGCFM*)
  316.     INLINE PASCAL $3F3C, $0009, $A82E;
  317.     (*$END*)
  318. (*    Below are the ColorPicker 2.0 routines.*)
  319. PROCEDURE PickColor*(VAR theColorInfo: ColorPickerInfo): Types.OSErr;
  320.     (*$IF NOT GENERATINGCFM*)
  321.     INLINE PASCAL $3F3C, $0213, $A82E;
  322.     (*$END*)
  323. PROCEDURE AddPickerToDialog*(VAR info: ApplicationDialogInfo; VAR thePicker: picker): Types.OSErr;
  324.     (*$IF NOT GENERATINGCFM*)
  325.     INLINE PASCAL $3F3C, $0414, $A82E;
  326.     (*$END*)
  327. PROCEDURE CreateColorDialog*(VAR info: SystemDialogInfo; VAR thePicker: picker): Types.OSErr;
  328.     (*$IF NOT GENERATINGCFM*)
  329.     INLINE PASCAL $3F3C, $0415, $A82E;
  330.     (*$END*)
  331. PROCEDURE CreatePickerDialog*(VAR info: PickerDialogInfo; VAR thePicker: picker): Types.OSErr;
  332.     (*$IF NOT GENERATINGCFM*)
  333.     INLINE PASCAL $3F3C, $0416, $A82E;
  334.     (*$END*)
  335. PROCEDURE DisposeColorPicker*(thePicker: picker): Types.OSErr;
  336.     (*$IF NOT GENERATINGCFM*)
  337.     INLINE PASCAL $3F3C, $0217, $A82E;
  338.     (*$END*)
  339. PROCEDURE GetPickerVisibility*(thePicker: picker; VAR visible: BOOLEAN): Types.OSErr;
  340.     (*$IF NOT GENERATINGCFM*)
  341.     INLINE PASCAL $3F3C, $0418, $A82E;
  342.     (*$END*)
  343. PROCEDURE SetPickerVisibility*(thePicker: picker; visible: INTEGER): Types.OSErr;
  344.     (*$IF NOT GENERATINGCFM*)
  345.     INLINE PASCAL $3F3C, $0319, $A82E;
  346.     (*$END*)
  347. PROCEDURE SetPickerPrompt*(thePicker: picker; VAR promptString: Types.Str255): Types.OSErr;
  348.     (*$IF NOT GENERATINGCFM*)
  349.     INLINE PASCAL $3F3C, $041a, $A82E;
  350.     (*$END*)
  351. PROCEDURE DoPickerEvent*(thePicker: picker; VAR data: EventData): Types.OSErr;
  352.     (*$IF NOT GENERATINGCFM*)
  353.     INLINE PASCAL $3F3C, $041b, $A82E;
  354.     (*$END*)
  355. PROCEDURE DoPickerEdit*(thePicker: picker; VAR data: EditData): Types.OSErr;
  356.     (*$IF NOT GENERATINGCFM*)
  357.     INLINE PASCAL $3F3C, $041c, $A82E;
  358.     (*$END*)
  359. PROCEDURE DoPickerDraw*(thePicker: picker): Types.OSErr;
  360.     (*$IF NOT GENERATINGCFM*)
  361.     INLINE PASCAL $3F3C, $021d, $A82E;
  362.     (*$END*)
  363. PROCEDURE GetPickerColor*(thePicker: picker; whichColor: ColorType; VAR color: PMColor): Types.OSErr;
  364.     (*$IF NOT GENERATINGCFM*)
  365.     INLINE PASCAL $3F3C, $051e, $A82E;
  366.     (*$END*)
  367. PROCEDURE SetPickerColor*(thePicker: picker; whichColor: ColorType; VAR color: PMColor): Types.OSErr;
  368.     (*$IF NOT GENERATINGCFM*)
  369.     INLINE PASCAL $3F3C, $051f, $A82E;
  370.     (*$END*)
  371. PROCEDURE GetPickerOrigin*(thePicker: picker; VAR where: Types.Point): Types.OSErr;
  372.     (*$IF NOT GENERATINGCFM*)
  373.     INLINE PASCAL $3F3C, $0420, $A82E;
  374.     (*$END*)
  375. PROCEDURE SetPickerOrigin*(thePicker: picker; where: Types.Point): Types.OSErr;
  376.     (*$IF NOT GENERATINGCFM*)
  377.     INLINE PASCAL $3F3C, $0421, $A82E;
  378.     (*$END*)
  379. PROCEDURE GetPickerProfile*(thePicker: picker; VAR profile: CMICCProfile.CMProfileHandle): Types.OSErr;
  380.     (*$IF NOT GENERATINGCFM*)
  381.     INLINE PASCAL $3F3C, $0422, $A82E;
  382.     (*$END*)
  383. PROCEDURE SetPickerProfile*(thePicker: picker; profile: CMICCProfile.CMProfileHandle): Types.OSErr;
  384.     (*$IF NOT GENERATINGCFM*)
  385.     INLINE PASCAL $3F3C, $0423, $A82E;
  386.     (*$END*)
  387. PROCEDURE GetPickerEditMenuState*(thePicker: picker; VAR mState: PickerMenuState): Types.OSErr;
  388.     (*$IF NOT GENERATINGCFM*)
  389.     INLINE PASCAL $3F3C, $0424, $A82E;
  390.     (*$END*)
  391. PROCEDURE ExtractPickerHelpItem*(thePicker: picker; itemNo: INTEGER; whichState: INTEGER; VAR helpInfo: HelpItemInfo): Types.OSErr;
  392.     (*$IF NOT GENERATINGCFM*)
  393.     INLINE PASCAL $3F3C, $0625, $A82E;
  394.     (*$END*)
  395. CONST
  396.     uppColorChangedProcInfo* = $000003C0; (* PROCEDURE (4 byte param, 4 byte param); *)
  397.     uppUserEventProcInfo* = $000000D0; (* PROCEDURE (4 byte param): 1 byte result; *)
  398.  
  399. PROCEDURE NewColorChangedProc*(userRoutine: ColorChangedProcPtr): ColorChangedUPP;
  400.     (*$IF NOT GENERATINGCFM *)
  401.     INLINE PASCAL $2E9F;
  402.     (*$END*)
  403.  
  404. PROCEDURE NewUserEventProc*(userRoutine: UserEventProcPtr): UserEventUPP;
  405.     (*$IF NOT GENERATINGCFM *)
  406.     INLINE PASCAL $2E9F;
  407.     (*$END*)
  408.  
  409. PROCEDURE CallColorChangedProc*(userData: LONGINT; VAR newColor: PMColor; userRoutine: ColorChangedUPP);
  410.     (*$IF NOT GENERATINGCFM*)
  411.     INLINE PASCAL $205F, $4E90;
  412.     (*$END*)
  413.  
  414. PROCEDURE CallUserEventProc*(VAR event: Events.EventRecord; userRoutine: UserEventUPP): BOOLEAN;
  415.     (*$IF NOT GENERATINGCFM*)
  416.     INLINE PASCAL $205F, $4E90;
  417.     (*$END*)
  418.  
  419. (* $ALIGN RESET*)
  420. (* $POP*)
  421.  
  422.  END ColorPicker.
  423.